/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package savet.gui.util;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

/**
 *
 * @author Rafael
 */
public class PeriodoUtil {

    public static void main(String args[]) {

//        Map<Integer, String> meses = PeriodoUtil.getMapMeses(new GregorianCalendar(2009, 3, 1).getTime(),
//                new GregorianCalendar(2011, 7, 1).getTime());
//        Map<Integer, String> anos = PeriodoUtil.getMapAnos(new GregorianCalendar(2009, 3, 1).getTime(),
//                new GregorianCalendar(2011, 7, 1).getTime());
//
//        for (int k : meses.keySet()) {
//            System.out.println("|" + k + "|" + meses.get(k) + "|" + anos.get(k) + "|");
//        }

        LinkedList<String> linkedMeses = PeriodoUtil.getListMeses(new GregorianCalendar(2009, 3, 1).getTime(),
                new GregorianCalendar(2011, 7, 1).getTime());
        LinkedList<String> linkedAnos = PeriodoUtil.getListAnos(new GregorianCalendar(2009, 3, 1).getTime(),
                new GregorianCalendar(2011, 7, 1).getTime());

        for (String string : linkedAnos) {
             System.out.println("|"+string+"|");
        }

//        for (int i = 0; i < linkedMeses.size(); i++) {
//             System.out.println("|" + i + "|" + linkedMeses.get(i) + "|" + linkedAnos.get(i) + "|");
//
//        }

    }

    public static LinkedList<String> getListMeses(Date inicioPeriodo, Date fimPeriodo) {

        LinkedList<String> meses = new LinkedList<String>();

        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(inicioPeriodo);

        while (calendar.getTime().before(fimPeriodo)) {
            meses.add(getMes(calendar.get(Calendar.MONTH)));
            calendar.add(Calendar.MONTH, 1);

        }
        calendar.setTime(fimPeriodo);
        meses.add(getMes(calendar.get(Calendar.MONTH)));

        return meses;
    }

    public static LinkedList<String> getListAnosDosMeses(Date inicioPeriodo, Date fimPeriodo) {

        LinkedList<String> anos = new LinkedList<String>();

        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(inicioPeriodo);

        while (calendar.getTime().before(fimPeriodo)) {
            anos.add(new Integer(calendar.get(Calendar.YEAR)).toString());
            calendar.add(Calendar.MONTH, 1);

        }
        calendar.setTime(fimPeriodo);
        anos.add(new Integer(calendar.get(Calendar.YEAR)).toString());

        return anos;
    }

    public static LinkedList<String> getListAnos(Date inicioPeriodo, Date fimPeriodo) {

        LinkedList<String> anos = new LinkedList<String>();

        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(inicioPeriodo);

        while (calendar.getTime().before(fimPeriodo)) {
            anos.add(new Integer(calendar.get(Calendar.YEAR)).toString());
            calendar.add(Calendar.YEAR, 1);

        }
        return anos;
    }


    public static Map<Integer, String> getMapMeses(Date inicioPeriodo, Date fimPeriodo) {

        SortedMap<Integer, String> meses = new TreeMap<Integer, String>();

        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(inicioPeriodo);
        int k = 0;
        while (calendar.getTime().before(fimPeriodo)) {
            meses.put(k, getMes(calendar.get(Calendar.MONTH)));
            calendar.add(Calendar.MONTH, 1);
            k++;
        }
        calendar.setTime(fimPeriodo);
        meses.put(k, getMes(calendar.get(Calendar.MONTH)));

        return meses;
    }

    public static Map<Integer, String> getMapAnos(Date inicioPeriodo, Date fimPeriodo) {

        SortedMap<Integer, String> anos = new TreeMap<Integer, String>();

        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(inicioPeriodo);
        int k = 0;
        while (calendar.getTime().before(fimPeriodo)) {
            anos.put(k, new Integer(calendar.get(Calendar.YEAR)).toString());
            calendar.add(Calendar.MONTH, 1);
            k++;
        }
        calendar.setTime(fimPeriodo);
        anos.put(k, new Integer(calendar.get(Calendar.YEAR)).toString());

        return anos;
    }

    private static String getMes(int mes) {
//        mes = (mes > 12) ? mes - 12 : mes;
        switch (mes) {
            case 0:
                return "Jan";
            case 1:
                return "Fev";
            case 2:
                return "Mar";
            case 3:
                return "Abr";
            case 4:
                return "Mai";
            case 5:
                return "Jun";
            case 6:
                return "Jul";
            case 7:
                return "Ago";
            case 8:
                return "Set";
            case 9:
                return "Out";
            case 10:
                return "Nov";
            case 11:
                return "Dez";
            default:
                return "";
        }
    }
}
